home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / GadUtil / AmigaE / Examples / BetterTest.e < prev   
Text File  |  1997-10-05  |  11KB  |  364 lines

  1. /*------------------------------------------------------------------------**
  2. **P-O Yliniemi (24-Dec-94) gadutil.library example translated into AmigaE **
  3. **                                      by  Terje Pedersen  18-Jan-96     **
  4. ** Compiled with Amiga v3.2a                                              **
  5. **         ec BetterTest.e                                                      **
  6. **------------------------------------------------------------------------*/
  7. OPT PREPROCESS
  8.  
  9. MODULE     'gadutil','libraries/gadutil',
  10.         'intuition/intuition','intuition/gadgetclass','intuition/screens',
  11.         'libraries/gadtools',
  12.         'graphics/text',
  13.         'exec/execbase','exec/lists','exec/ports',
  14.         'utility/tagitem'
  15.  
  16. DEF appStrings,layoutmenutags,stdGTTags,stdButtonTags,
  17.     stdGadTags,nextDriveGad,prevDriveGad,driveGad,cycleText,
  18.     driveGTTags,reqGad,checkBoxGad,fileNameGad,integerGad,
  19.     driveMxGad,sliderGad,sliderGTTags,listViewGad,
  20.     scrollGad,scrollGTTags,paletteGad,paletteGTTags,gadgets,myNewMenu,
  21.     layoutTags[6]:ARRAY OF tagitem,lVGTTags[3]:ARRAY OF tagitem,
  22.     mXGadGTTags[4]:ARRAY OF tagitem
  23.  
  24. DEF    farright,farbottom,gadutilbase,
  25.     screen:PTR TO screen,main_win:PTR TO window,priv_info
  26.  
  27. CONST     DRIVE_MX_GAD=11,
  28.          LEFT_OFFSET=6,
  29.         TOP_OFFSET=3
  30.  
  31. /*--------------------- Start of localized data --------------------------*/
  32.  
  33. ENUM     MSG_NEXTDRIVE,
  34.         MSG_PREVDRIVE,
  35.         MSG_DRIVE,
  36.         MSG_CHECKME,
  37.         MSG_REQUESTER,
  38.         MSG_FILENAME,
  39.         MSG_INTEGER,
  40.         MSG_DRAGME,
  41.         MSG_SCROLLME,
  42.         MSG_SELECTITEM,
  43.         MSG_SELECTCOL
  44. ENUM    MNU_1_TITLE=100,
  45.         MNI_1_IT1,
  46.         MNI_1_IT2,
  47.         MNI_1_IT3,
  48.         MNS_1_IT3_1,
  49.         MNS_1_IT3_2,
  50.         MNI_1_IT4
  51.  
  52. #define catalogname 'BetterTest.catalog'
  53. #define UNSIGNED(x) ((x) AND $FFFF)
  54.  
  55. /*---------------------- End of localized data ---------------------------*/
  56.  
  57. PROC initialize()
  58.  
  59.     appStrings:=[
  60.         MSG_NEXTDRIVE, '_Next drive',
  61.         MSG_PREVDRIVE, '_Prev drive',
  62.         MSG_DRIVE, '_Drive',
  63.         MSG_CHECKME, 'C_heck me:',
  64.         MSG_REQUESTER, '_Requester',
  65.         MSG_FILENAME, '_Filename:',
  66.         MSG_INTEGER, '_Integer:',
  67.         MSG_DRAGME, 'Dra_g me:',
  68.         MSG_SCROLLME, 'Scr_oll me:',
  69.         MSG_SELECTITEM, '_Select an item:',
  70.         MSG_SELECTCOL, 'Select _Color:',
  71.         MNU_1_TITLE, ' \\Project',
  72.         MNI_1_IT1, 'O\\Open...',
  73.         MNI_1_IT2, 'S\\Save',
  74.         MNI_1_IT3, ' \\Print',
  75.         MNS_1_IT3_1, ' \\Draft',
  76.         MNS_1_IT3_2, ' \\NLQ',
  77.         MNI_1_IT4, 'Q\\Quit']:appstring
  78.  
  79.     layoutmenutags:=[GTMN_NEWLOOKMENUS,TRUE,TAG_DONE]:tagitem
  80.  
  81.     stdGTTags:=[GT_UNDERSCORE,"_",TAG_DONE]:tagitem
  82.     stdButtonTags:=[GU_Flags,PLACETEXT_IN,GU_LabelHotkey,TRUE,TAG_DONE]:tagitem
  83.     stdGadTags:=[GU_LabelHotkey,TRUE,TAG_DONE]:tagitem
  84.  
  85.     nextDriveGad:=[
  86.         GU_GadgetKind,BUTTON_KIND,GU_LocaleText,MSG_NEXTDRIVE,
  87.         GU_Left,LEFT_OFFSET,GU_Top,TOP_OFFSET,
  88.         GU_AutoHeight,4,GU_AutoWidth,20,
  89.         TAG_MORE,stdButtonTags]:tagitem
  90.  
  91.     prevDriveGad:=[
  92.         GU_GadgetKind,    BUTTON_KIND,    GU_LocaleText,    MSG_PREVDRIVE,
  93.         GU_DupeWidth,    MSG_NEXTDRIVE,    GU_LeftRel,    MSG_NEXTDRIVE,
  94.         GU_AddLeft,    INTERWIDTH,    TAG_MORE, stdButtonTags]:tagitem
  95.  
  96.     driveGad:=[
  97.         GU_GadgetKind,    CYCLE_KIND,    GU_LocaleText,    MSG_DRIVE,
  98.         GU_TopRel,    MSG_PREVDRIVE,    GU_AddTop,        INTERHEIGHT,
  99.         GU_Flags,    PLACETEXT_LEFT,    TAG_MORE, stdGadTags]:tagitem
  100.  
  101.     cycleText:=['DF0:', 'DF1:', 'DF2:', 'DF3:', NIL]
  102.     driveGTTags:=[GTCY_LABELS, cycleText, TAG_MORE, stdGTTags]:tagitem
  103.  
  104.     reqGad:=[
  105.         GU_GadgetKind,    BUTTON_KIND,    GU_LocaleText,    MSG_REQUESTER,
  106.         GU_TopRel,    MSG_DRIVE,    GU_AddTop,    INTERHEIGHT,
  107.         TAG_MORE, stdButtonTags]:tagitem
  108.  
  109.     checkBoxGad:=[
  110.         GU_Width,    CHECKBOX_WIDTH,    GU_Height,    CHECKBOX_HEIGHT,
  111.         GU_GadgetKind,    CHECKBOX_KIND,    GU_LocaleText,    MSG_CHECKME,
  112.         GU_AlignRight,    MSG_NEXTDRIVE,    GU_Flags,    PLACETEXT_LEFT,
  113.         TAG_MORE, stdGadTags]:tagitem
  114.  
  115.     fileNameGad:=[
  116.         GU_GadgetKind,    STRING_KIND,    GU_TopRel,    MSG_REQUESTER,
  117.         GU_LocaleText,    MSG_FILENAME,    GU_AutoHeight,    4,
  118.         GU_AlignLeft,    MSG_CHECKME,    GU_AlignRight,    DRIVE_MX_GAD,
  119.         GU_AddTop,    INTERHEIGHT,    GU_AddWidth,    4,
  120.         TAG_MORE, stdGadTags]:tagitem
  121.  
  122.     integerGad:=[
  123.         GU_GadgetKind,    INTEGER_KIND,    GU_TopRel,    MSG_FILENAME,
  124.         GU_LocaleText,    MSG_INTEGER,    GU_AddTop,    INTERHEIGHT,
  125.         TAG_MORE, stdGadTags]:tagitem
  126.  
  127.     driveMxGad:=[
  128.         GU_GadgetKind,    MX_KIND,        GU_AlignTop,    MSG_NEXTDRIVE,
  129.         GU_Width,        MX_WIDTH,        GU_Height,        MX_HEIGHT,
  130.         GU_AdjustTop,    2,                GU_Flags,        PLACETEXT_LEFT OR NG_HIGHLABEL,
  131.         GU_LeftRel,        MSG_PREVDRIVE,    GU_AddLeftChar,    7,
  132.         GU_GadgetText,    'Driv_e',        GU_LabelHotkey,    TRUE,
  133.         TAG_DONE]:tagitem
  134.  
  135.     mXGadGTTags:=[
  136.         GTMX_LABELS,cycleText,GTMX_SPACING,2,
  137.         GTMX_ACTIVE,2,TAG_DONE]:tagitem
  138.  
  139.     sliderGad:=[
  140.         GU_GadgetKind,    SLIDER_KIND,    GU_AlignLeft,    MSG_FILENAME,
  141.         GU_AlignRight,    MSG_FILENAME,    GU_AutoHeight,    4,
  142.         GU_TopRel,        MSG_INTEGER,    GU_AddTop,        INTERHEIGHT,
  143.         GU_AddWidth,    -13,            GU_Flags,        PLACETEXT_LEFT,
  144.         GU_LocaleText,    MSG_DRAGME,    TAG_MORE,stdGadTags]:tagitem
  145.  
  146.     sliderGTTags:=[
  147.         GTSL_MIN,        -50,            GTSL_MAX,    50,
  148.         GTSL_LEVEL,        10,                GTSL_MAXLEVELLEN, 3,
  149.         GTSL_LEVELFORMAT, '%3ld',
  150.         GTSL_LEVELPLACE, PLACETEXT_RIGHT,
  151.         TAG_MORE,stdGTTags]:tagitem
  152.  
  153.     listViewGad:=[
  154.         GU_GadgetKind,    LISTVIEW_KIND,    GU_AlignTop,    MSG_DRIVE,
  155.         GU_AlignBottom,    MSG_INTEGER,    GU_LocaleText,    MSG_SELECTITEM,
  156.         GU_LeftRel,    MSG_INTEGER,    GU_Columns,    26,
  157.         GU_Flags,    PLACETEXT_ABOVE OR NG_HIGHLABEL,
  158.         GU_AddLeft,    10, TAG_MORE, stdGadTags]:tagitem
  159.  
  160.     lVGTTags:=[
  161.         GTLV_LABELS,NIL,GTLV_SHOWSELECTED,-1,
  162.         TAG_MORE, stdGTTags]:tagitem
  163.  
  164.     scrollGad:=[
  165.         GU_GadgetKind,    SCROLLER_KIND,    GU_LocaleText,    MSG_SCROLLME,
  166.         GU_AlignLeft,    MSG_DRAGME,    GU_AlignRight,    MSG_INTEGER,
  167.         GU_TopRel,    MSG_DRAGME,    GU_AddTop,    INTERHEIGHT,
  168.         GU_Flags,    PLACETEXT_LEFT,    GU_AddWidth,    20,
  169.         GU_DupeHeight,    MSG_DRAGME,    TAG_MORE, stdGadTags]:tagitem
  170.  
  171.     scrollGTTags:=[
  172.         GTSC_TOP,        110,    GTSC_TOTAL,        9,
  173.         GTSC_VISIBLE,    5,        GTSC_ARROWS,    16,
  174.         TAG_MORE, stdGTTags]:tagitem
  175.  
  176.     paletteGad:=[
  177.         GU_GadgetKind,    PALETTE_KIND,    GU_LocaleText,    MSG_SELECTCOL,
  178.         GU_LeftRel,    MSG_SCROLLME,    GU_AddLeft,    INTERWIDTH,
  179.         GU_Flags,    PLACETEXT_ABOVE OR NG_HIGHLABEL,
  180.         GU_TopRel,    MSG_SELECTITEM,    GU_AdjustTop,    INTERHEIGHT,
  181.         GU_AlignBottom,    MSG_SCROLLME,    GU_AlignRight,    MSG_SELECTITEM,
  182.         TAG_MORE, stdGadTags]:tagitem
  183.  
  184.     paletteGTTags:=[
  185.         GTPA_DEPTH,    2,        GTPA_INDICATORWIDTH,    36,
  186.         TAG_MORE, stdGTTags]:tagitem
  187.  
  188.     gadgets:=[
  189.         MSG_NEXTDRIVE,    nextDriveGad,    stdGTTags,            NIL,
  190.         MSG_PREVDRIVE,    prevDriveGad,    stdGTTags,            NIL,
  191.         MSG_DRIVE,        driveGad,        driveGTTags,        NIL,
  192.         MSG_REQUESTER,    reqGad,            stdGTTags,            NIL,
  193.         MSG_CHECKME,    checkBoxGad,    stdGTTags,            NIL,
  194.         MSG_FILENAME,    fileNameGad,    stdGTTags,            NIL,
  195.         MSG_INTEGER,    integerGad,        stdGTTags,            NIL,
  196.         DRIVE_MX_GAD,    driveMxGad,        mXGadGTTags,        NIL,
  197.         MSG_DRAGME,        sliderGad,        sliderGTTags,        NIL,
  198.         MSG_SELECTITEM,    listViewGad,    lVGTTags,            NIL,
  199.         MSG_SCROLLME,    scrollGad,        scrollGTTags,        NIL,
  200.         MSG_SELECTCOL,    paletteGad,        paletteGTTags,        NIL,
  201.         -1,        NIL,        NIL,        NIL]:layoutgadget
  202.  
  203.     myNewMenu:=[
  204.         NM_TITLE,    0,    MNU_1_TITLE,    0,    0,    0,    0,    /* | Project |    */
  205.         NM_ITEM,    0,    MNI_1_IT1,        0,    0,    0,    1,    /* Open [O]        */
  206.         NM_ITEM,    0,    MNI_1_IT2,        0,    0,    0,    2,    /* Save [S]        */
  207.         NM_ITEM,    0,    NM_BARLABEL,    0,    0,    0,    0,    /* -----------    */
  208.           NM_ITEM,    0,    MNI_1_IT3,        0,    0,    0,    0,    /* Print...        */
  209.            NM_SUB,        0,    MNS_1_IT3_1,    0,    0,    0,    3,    /*      Draft    */
  210.            NM_SUB,        0,    MNS_1_IT3_2,    0,    0,    0,    4,    /*      NLQ        */
  211.           NM_ITEM,    0,    NM_BARLABEL,    0,    0,    0,    0,    /* -----------    */
  212.           NM_ITEM,    0,    MNI_1_IT4,        0,    0,    0,    5,    /* Quit [Q]        */
  213.          NM_END,        0,    NIL,            0,    0,    0,    0]:newmenu
  214.  
  215.     layoutTags:=[
  216.         GU_RightExtreme,     {farright},
  217.         GU_LowerExtreme,     {farbottom},
  218.         GU_DefTextAttr,        0,
  219.         GU_Catalog,            0,
  220.         GU_AppStrings,         appStrings,
  221.         TAG_DONE]:tagitem
  222.  
  223. ENDPROC
  224.  
  225. /*-----------------------------------------------------------------*/
  226.  
  227.  
  228. PROC main() HANDLE
  229. DEF glist:PTR TO gadget,liblist:PTR TO execbase,menustrip:PTR TO menu
  230.  
  231.     initialize()
  232.     
  233.     liblist:=execbase
  234.     liblist:=liblist.liblist
  235.     lVGTTags[].data:=liblist
  236.  
  237.     IF (gadutilbase:=OpenLibrary('gadutil.library',0))=NIL THEN Raise('Could not open gadutil.library')
  238.     layoutTags[3].data:=Gu_OpenCatalog(catalogname,0)
  239.  
  240.     IF (screen:=LockPubScreen(NIL))=NIL THEN Raise('Could not lock screen')
  241.     layoutTags[2].data:=screen.font
  242.  
  243.     IF (priv_info:=Gu_LayoutGadgetsA({glist}, gadgets, screen, layoutTags))=NIL THEN Raise('Layoutgadgets')
  244.  
  245.     main_win:=OpenWindowTagList(NIL,[
  246.                 WA_LEFT,    0,
  247.                 WA_TOP,        screen.font::textattr.ysize + 3,
  248.                 WA_INNERWIDTH, farright + LEFT_OFFSET,
  249.                 WA_INNERHEIGHT, farbottom + TOP_OFFSET,
  250.                 WA_IDCMP,    LISTVIEWIDCMP OR IDCMP_MENUPICK OR CYCLEIDCMP OR
  251.                             IDCMP_REFRESHWINDOW OR IDCMP_CLOSEWINDOW OR
  252.                             IDCMP_VANILLAKEY OR IDCMP_RAWKEY,
  253.                 WA_FLAGS,    WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR
  254.                             WFLG_CLOSEGADGET OR WFLG_ACTIVATE OR
  255.                             WFLG_SMART_REFRESH OR WFLG_REPORTMOUSE,
  256.                 WA_GADGETS, glist,    
  257.                 WA_NEWLOOKMENUS,TRUE,
  258.                 WA_TITLE,    'GadUtil library test',
  259.                 TAG_DONE])
  260.  
  261.     IF main_win=NIL THEN Raise('Could not open window')
  262.  
  263.     Gu_RefreshWindow(main_win, NIL)
  264.     IF (menustrip:=Gu_CreateLocMenuA(myNewMenu,priv_info,NIL,layoutmenutags))=NIL THEN Raise('menu')
  265.     IF (SetMenuStrip(main_win, menustrip))=NIL THEN Raise('Setmenustrip')
  266.  
  267.     process_window_events(main_win, menustrip)
  268.     
  269.     Raise(0)
  270. EXCEPT
  271.     IF exception THEN WriteF('\s\n',exception)
  272.     IF main_win
  273.         IF menustrip
  274.             ClearMenuStrip(main_win)
  275.             Gu_FreeMenus(menustrip)
  276.         ENDIF
  277.         CloseWindow(main_win)
  278.     ENDIF
  279.     IF priv_info THEN Gu_FreeLayoutGadgets(priv_info)
  280.     IF screen THEN UnlockPubScreen(NIL, screen)
  281.     IF (layoutTags[3].data) THEN Gu_CloseCatalog(layoutTags[3].data)
  282.     IF gadutilbase THEN CloseLibrary(gadutilbase)
  283. ENDPROC
  284.  
  285. PROC process_window_events(win:PTR TO window,menuStrip:PTR TO menu)
  286. DEF imsg:PTR TO intuimessage,gad:PTR TO gadget,tempgad:PTR TO gadget,
  287.     item:PTR TO menuitem,going=TRUE,menunumber,coords,class,id,itemnum
  288.  
  289.     WHILE going
  290.         Wait(Shl(1,win.userport::mp.sigbit))
  291.  
  292.         WHILE (going AND (imsg:=Gu_GetIMsg(win.userport)))
  293.             class:=imsg.class
  294.             SELECT class
  295.             CASE IDCMP_GADGETUP
  296.                 toggleLED()
  297.                 gad:=imsg.iaddress
  298.                 id:=gad.gadgetid
  299.                 SELECT id
  300.                 CASE MSG_NEXTDRIVE
  301.                     IF (tempgad:=Gu_GetGadgetPtr(DRIVE_MX_GAD, gadgets))
  302.                         IF (mXGadGTTags[2].data<3) 
  303.                             mXGadGTTags[2].data:=mXGadGTTags[2].data+1
  304.                         ELSE
  305.                             mXGadGTTags[2].data:=0
  306.                         ENDIF
  307.                         Gu_SetGadgetAttrsA(tempgad, win, NIL, mXGadGTTags[2])
  308.                     ENDIF
  309.                 CASE MSG_PREVDRIVE
  310.                     IF (tempgad:=Gu_GetGadgetPtr(DRIVE_MX_GAD, gadgets))
  311.                         IF (mXGadGTTags[2].data>0)
  312.                             mXGadGTTags[2].data:=mXGadGTTags[2].data-1
  313.                         ELSE
  314.                             mXGadGTTags[2].data:=3
  315.                         ENDIF
  316.                         Gu_SetGadgetAttrsA(tempgad, win, NIL, mXGadGTTags[2])
  317.                     ENDIF
  318.                 CASE MSG_REQUESTER
  319.                     Gu_BlockInput(win)
  320.                     Delay(50)
  321.                     Gu_FreeInput(win)
  322.                 CASE MSG_DRIVE 
  323.                     toggleLED()
  324.                 ENDSELECT
  325.  
  326.             CASE IDCMP_GADGETDOWN
  327.                 gad:=imsg.iaddress
  328.                 IF (gad.gadgetid = DRIVE_MX_GAD) THEN mXGadGTTags[2].data:=imsg.code
  329.  
  330.             CASE IDCMP_MOUSEMOVE
  331.                 IF (tempgad:=Gu_GetGadgetPtr(MSG_SELECTITEM, gadgets))
  332.                     coords:=(Shl(imsg.mousex,16) OR imsg.mousey)
  333.                     IF (Gu_CoordsInGadBox(coords,tempgad)) THEN toggleLED()
  334.                 ENDIF
  335.  
  336.             CASE IDCMP_MENUPICK
  337.                   -> E-Note: convert message code to an unsigned INT
  338.                 menunumber:=UNSIGNED(imsg.code)
  339.                 WHILE (menunumber<>MENUNULL) AND going
  340.                     item:=ItemAddress(menuStrip, menunumber)
  341.                     
  342.                     itemnum:=ITEMNUM(menunumber)
  343.                     IF itemnum=5 THEN going:=FALSE
  344.  
  345.                   -> E-Note: convert message code to an unsigned INT
  346.                     menunumber:=UNSIGNED(item.nextselect)
  347.                 ENDWHILE
  348.  
  349.             CASE IDCMP_CLOSEWINDOW
  350.                 going:=FALSE
  351.  
  352.             CASE IDCMP_REFRESHWINDOW
  353.                 Gu_BeginRefresh(win)
  354.                 Gu_EndRefresh(win, TRUE)
  355.             ENDSELECT
  356.             Gu_ReplyIMsg(imsg);
  357.         ENDWHILE
  358.     ENDWHILE
  359. ENDPROC
  360.  
  361. PROC toggleLED()
  362.     BCHG #1,$bfe001
  363. ENDPROC
  364.